package cap4;

class  Correo {
	//Atributos de Instancia
	   private Mensaje[] T;
	   private int cant;
	/*Constructor 
	Crea una estructura con capacidad para max mensajes*/
	public  Correo(int max) {
		T= new Mensaje [max];
	     cant = 0;}
	//Comandos
	public void insertar  (Mensaje m) {
		/*Asigna el mensaje m a la primera posición libre del arreglo, es decir, cant. Aumenta el valor de cant. Requiere que la clase cliente haya verificado que la colección no esté llena, m esté ligad y no pertenezca a la colección*/
		  T[cant++] = m;   }
		public void eliminar  ( Mensaje m){
		/* Busca un mensaje con la misma identidad que m en la secuencia de mensajes, si lo encuentra arrastra los mensajes que siguen una posición*/
		  boolean esta = false; int i= 0;
		  while (!esta && i <  cantMen())//Busca a m
		     if (T [i] == m)
		       esta = true;
		     else
		       i++;
		  if (esta) {
		    cant--;
		    arrastrar(i);}}
		private void arrastrar( int i){
		/* arrastra todos los elementos una posición hacia arriba*/
		   while (i < cantMen()){
		     T[i] = T[i+1];
		     i++;}
		  T[i]=null;}
		//Consultas
		public int  cantMen () {
		     return cant;} 
		public boolean estaLleno() {
		     return cant == T.length;}
		public boolean hayMen() {
		     return cant > 0;}
		public Mensaje mensaje(int p){
		/*Retorna el mensaje que corresponde a la posición p, si p no es una posición válida retorna nulo*/
		   Mensaje m = null;
		   if (p>=0 && p < cantMen()) m = T[p];
		   return m;}
		public boolean pertenece (Mensaje m){
		/*Decide si algún elemento de la colección tiene la misma identidad que m*/
		  boolean esta = false;
		  for (int i = 0; !esta && i <  cantMen() ; i++){
		     esta = T[i] == m;}
		  return esta;}
		public int caracteres(int m){
		/*Cuenta la cantidad de mensajes con más de m caracteres*/
		int car =0;
		String content;
		for (int i = 0; i <  cantMen(); i++) {
		    content = T[i].obtenerContenido();
		    if (content.length() > m) car++;}
		return car;
		}
		public Correo asunto(String a){
		/*Genera un objeto de clase Correo solo con los objetos que corresponden al asunto a*/
		Correo n = new Correo(cantMen());
		for (int i = 0; i <  cantMen() ; i++)
		   if(T[i].obtenerAsunto().equals(a)){
		     n.insertar(T[i]);}
		return n;    }
		}